#include <stdio.h>
#include <assert.h>

/*
 * 1.实现strcpy
2.实现strcat
3.实现strstr
4.实现strchr
5.实现strcmp
6.实现memcpy
7.实现memmove
 * */
void MyStrcpy(char * dest , const char * src){
    assert(dest!=NULL);
    assert(src!=NULL);
    while (*dest++ = *src++);
}

void MyStrcay(char * dest ,const char * src){
    assert(dest!=NULL);
    assert(src!=NULL);
    while (*dest++){
        if(*dest == '\0')
            while (*dest++ = *src++);

    }
}

/*
 * 第一步 ，获取needle的长度
 * 第二步，循环扫描一次haystack
 * 第三步，如果扫描到与 needle 首字母相同的字母
 * 第四步，以needle的长度对 haystack 后面的长度进行扫描，如果结果相等，返回这串字符，如果不相等，继续扫描 haystack的下一个字符
 * 第五步，没有扫描到，返回 null
 */
 int  MyStrstr(const char * haystack , char * needle){
    assert(haystack);
    assert(needle);
    int count = 0,j=0;
    char * p = needle;//防止needle的地址被改变
    while (*p++)count++;  //获取needle的长度
    while (*haystack !='\0' ){
        if(*haystack == * needle){//如果扫描到与 needle 首字母相同的字母
             j = 0;
            for(int i = 0 ; i< count ; i++){//以needle的长度对 haystack 后面的长度进行扫描，如果结果相等，返回这串字符，如果不相等，继续扫描 haystack的下一个字符
                if(*(haystack + i) == *(needle + i)){
                    j++;//如果 haystack + i =  needle + i ，就J 增加一次，如果最后j的值与needle长度相等，则说明 haystack里有needle这串字符串
                } else {
                    break;
                }
            }
            if(j==count){
                return 1; //如果j与 needle的长度相等，返回1
            }
        }
        haystack++;
    }
    return 0; //循环结束，返回0
}
/*
 * 比较两个字符串的大小
 * 第一步，循环，从第一个字母开始比较，比较2个字母的，ASCLL码值
 * 第二步，str1 大就返回1 ，str2 大就返回0  相等返回2
 * */
int MyStrcmp(const char* str1,const char * str2){
    assert(str1!=NULL);
    assert(str2!=NULL);
    while ( (*str1++ != '\0')  &&  (*str2++ !='\0')){
        if ((*str1) > (*str2)){
            return  1 ;
        } else  if  ((*str1) < (*str2)){
            return  0 ;
        }
    }
    return  2 ;
 }

 /*
  * 把arr2的值复制到arr1里面，以 dest为起点，len为长度复制
  * */
void  MyMemcpy(char * arr1, const char* arr2,int dest,int len){
    //dest为 arr2的初始复制位置，len 为从这个位置开始后的长度
   for(int i =  0 ; i <= len ; i++){
       *(arr1+i) = *(arr2+dest+i);
   }
 }




int main(){
    char s1[20] = "";
    char s2[20] = "www.com.TTTTTT";
    //MyStrcpy(s1,s2);
    //MyStrcay(s1,s2);
    //int rest =MyStrcmp(s1,s2);
    MyMemcpy(s1,s2,2,6);
    printf("%s",s1);

    return 0;
}